# -*- Makefile -*-

# This make module sets up the actual experiments

L1 = fr
L2 = en
tune-ref-ready = /fs/sif0/bhaddow/experiments/accept/symantec-baseline/tuning/reference.tc.18
eval-ref-ready = /fs/saxnot5/germann/accept/homophones/exp.new/evaluation/201201_devtest_b.reference.tok.1 
crp_train      = /fs/sif0/bhaddow/experiments/accept/symantec-baseline/training/corpus.19
ttable         = /fs/sif0/bhaddow/experiments/accept/symantec-baseline/model/phrase-table.10

untuned_moses_ini = model/moses.ini.0
fixed-iweight = --activate-feature d_0,d_1,d_2,d_3,d_4,d_5,d_6,lm_0,w_0,tm_0,tm_1,tm_2,tm_3,tm_4

# list the evaluation metrics to be used for evaluation
# TO DO: list available metrics
eval-metrics  = multi-bleu
moses-threads = 20
tuning-runs   = $(shell seq 25)

# experiments.make: WSCHEMES = uniform unigram bigram bigram2
# experiments.make: DATASETS = tune eval
# experiments.make: PREPROC  = baseline uniq multi
# experiments.make: CSETS    = unfiltered filtered edited
experiments.make: WSCHEMES = bigram2 
experiments.make: DATASETS = tune eval
experiments.make: PREPROC  = baseline
experiments.make: CSETS    = filtered 
# remake experiments.make if this file changes
experiments.make: $(word $(words ${MAKEFILE_LIST}), ${MAKEFILE_LIST})
experiments.make:
	mkdir $@.lock
	echo $(call lockline) > $@.lock/owner
	echo '# -*- Makefile -*-' > $@_
	echo '# This file was automatically generated by setup-experiments.make.' >> $@_
	echo 'experiments := '                   >> $@_; 
	$(foreach p, ${PREPROC}, \
	echo '# NEW EXPERIMENT #####################################' >> $@_; \
	echo 'experiments += $p'                   >> $@_; \
	echo 'ctr = $$(words $${experiments})'     >> $@_; \
	echo '$p: input-type = 0'                  >> $@_; \
	echo '$p: eval-sets = $p.eval'             >> $@_; \
	echo '$p: tune-src = input/$p.tune.tc'     >> $@_; \
	echo '$p: tune-ref = ${tune-ref-ready}'    >> $@_; \
	echo '$p: $p.eval-src = input/$p.eval.tc'  >> $@_; \
	echo '$p: $p.eval-ref = ${eval-ref-ready}' >> $@_; \
	echo '$p: evaluation/$${ctr}/report'       >> $@_; \
	echo                                       >> $@_; \
	echo 'evaluation/$p/%/$p.eval.output: input = input/$p.eval.tc' >> $@_; \
	echo 'evaluation/$p/%/$p.eval.output: input/$p.eval.tc' >> $@_; \
	echo $(if $(findstring ini,${tuned_moses_ini}), \
	  'evaluation/$${ctr}/$p.eval.output: ${tuned_moses_ini}', \
	  'evaluation/$${ctr}/$p.eval.output: tuning/$${ctr}/moses.tuned.ini') >> $@_; \
	echo $(if $(findstring ini,${tuned_moses_ini}), \
	  'evaluation/$${ctr}/$p.eval.output: moses_ini := ${tuned_moses_ini}', \
	  'evaluation/$${ctr}/$p.eval.output: moses_ini := tuning/$${ctr}/moses.tuned.ini') >> $@_; \
	echo 'evaluation/$${ctr}/$p.eval.multi-bleu: $${$p.eval-ref}' >> $@_; \
	echo                                       >> $@_;)
	$(foreach c, ${CSETS}, \
	$(foreach p, ${PREPROC}, \
	$(foreach w, ${WSCHEMES}, \
	echo '# NEW EXPERIMENT #####################################' >> $@_; \
	echo 'experiments += $w-$c-$p'                                >> $@_; \
	echo 'ctr = $$(words $${experiments})'     >> $@_; \
	echo '$w-$c-$p: input-type = 1'                  >> $@_; \
	echo '$w-$c-$p: eval-sets = $w-$c-$p.eval'             >> $@_; \
	echo '$w-$c-$p: tune-src = input/$w-$c-$p.tune.cfn'     >> $@_; \
	echo '$w-$c-$p: tune-ref = ${tune-ref-ready}'    >> $@_; \
	echo '$w-$c-$p: $w-$c-$p.eval-src = input/$w-$c-$p.eval.cfn'  >> $@_; \
	echo '$w-$c-$p: $w-$c-$p.eval-ref = ${eval-ref-ready}' >> $@_; \
	echo '$w-$c-$p: evaluation/$${ctr}/report'       >> $@_; \
	echo                                       >> $@_; \
	echo 'evaluation/$${ctr}/$w-$c-$p.eval.output: input = input/$w-$c-$p.eval.cfn' >> $@_; \
	echo 'evaluation/$${ctr}/$w-$c-$p.eval.output: input/$w-$c-$p.eval.cfn' >> $@_; \
	echo $(if $(findstring ini,${tuned_moses_ini}), \
	  'evaluation/$${ctr}/$w-$c-$p.eval.output: ${tuned_moses_ini}', \
	  'evaluation/$${ctr}/$w-$c-$p.eval.output: tuning/$${ctr}/moses.tuned.ini') >> $@_; \
	echo $(if $(findstring ini,${tuned_moses_ini}), \
	  'evaluation/$${ctr}/$w-$c-$p.eval.output: moses_ini := ${tuned_moses_ini}', \
	  'evaluation/$${ctr}/$w-$c-$p.eval.output: moses_ini := tuning/$${ctr}/moses.tuned.ini') >> $@_; \
	echo 'evaluation/$${ctr}/$w-$c-$p.eval.multi-bleu: $${$w-$c-$p.eval-ref}' >> $@_; \
	echo                                       >> $@_;\
	$(foreach d, tune eval, \
	echo 'cfn-targets += input/$w-$c-$p.$d.cfn' >> $@_; \
	echo 'input/$w-$c-$p.$d.cfn: input/$p.$d.tc' >> $@_; \
	printf '\t@mkdir $$@.lock\n\t@echo $$(call lockline) > $$@.lock/owner\n' >> $@_; \
	printf '\tcreate-confusion-network.01.exe -q -w $w -s csets/csets.$c.txt -c ../mm/fr < $$< > $$@_ && mv $$@_ $$@\n' >> $@_;\
	printf '\t@rm $$@.lock/owner\n\t@rmdir $$@.lock\n' >> $@_;))))
	echo '.PHONY += $$(experiments) cfn' >> $@_
	echo 'cfns: $${cfn-targets}' >> $@_
	@mv $@_ $@
	@rm $@.lock/owner
	@rmdir $@.lock



#	# echo 'ctr = $$(words $${experiments})'                        >> $@_; \
	# echo 'eval-sets = $w-$c-$p.eval'                 >> $@_; \
	# echo 'rx  := $$(call report-prereqs,$${ctr},$${eval-sets})' >> $@_; \
	# echo '$w-$c-$p: run-id    := $${ctr}'                         >> $@_; \
	# echo '$w-$c-$p: tune-input = input/$w-$c-$p.tune.cfn'         >> $@_; \
	# echo '$w-$c-$p: tune-src = input/$w-$c-$p.tune.cfn'           >> $@_; \
	# echo '$w-$c-$p: tune-ref = ${tune-ref-ready}'                 >> $@_; \
	# echo '$w-$c-$p: $w-$c-$p.eval-src = input/$w-$c-$p.eval.cfn'  >> $@_; \
	# echo '$w-$c-$p: $w-$c-$p.eval-ref = ${eval-ref-ready}'        >> $@_; \
	# echo '$w-$c-$p: input-type = 1'                               >> $@_; \
	# echo '$w-$c-$p: mert.options += $$(if $$(findstring uniform,$w),${fixed-iweight})' >> $@_; \
	# echo '$w-$c-$p: evaluation/report.$${ctr}'                    >> $@_; \
	# echo                                                          >> $@_; \
	# echo 'evaluation/$w-$c-$p.eval.output.$${ctr}: input = input/$w-$c-$p.eval.cfn' >> $@_; \
	# echo                                                          >> $@_; \
	# $(foreach d, tune eval, \
	# ofile=input/$w-$c-$p.$d.cfn; \
	# ifile=input/$p.$d.tc; \
	# echo "$$ofile: $$ifile" >> $@_ ; \
	# printf '\t create-confusion-network.01.exe -w $w -s csets/cset.$c.txt -c ../mm/fr < $$< > $$@_ && mv $$@_ $$@\n' >> $@_ ; \
	# echo                                                          >> $@_; ))))
	# echo '.PHONY += $$(experiments)' >> $@_
	# @mv $@_ $@
	# @rm $@.lock/owner
	# @rmdir $@.lock
